home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2008 November / PCWNOV08.iso / Software / Freeware / Mini Map Sidebar 0.3 / mini_map_sidebar-0.3.0-fx.xpi / chrome / content / tree.js < prev   
Encoding:
Text File  |  2008-02-23  |  8.1 KB  |  223 lines

  1. var XXX = function () {
  2.         var out = ''
  3.     if (arguments.length > 1) {
  4.         for (var i = 0;i < arguments.length;i++) {
  5.             out += arguments[i] + " : ";
  6.         }
  7.     } 
  8. else {
  9. }
  10. };
  11.  
  12.  
  13. function flock_getTreeSelection(aTree, aCols, aOpts) {
  14.     if (!aOpts) aOpts = {};
  15.     var indexList = [];
  16.     
  17.     var rangeMin = {};
  18.     var rangeMax = {};
  19.     aTree.view.selection.getRangeAt(0, rangeMin, rangeMax);
  20.     var out = [];
  21.     var rangeCount = aTree.view.selection.getRangeCount();
  22.     XXX('RANGE INIT', rangeMin.value, rangeMax.value);
  23.     XXX('RANGECOUNT', rangeCount);
  24.     for (var j = 0; j < rangeCount; ++j) {
  25.         var dummy = {};
  26.         aTree.view.selection.getRangeAt(j, dummy, rangeMax);
  27.         XXX('RANGE', rangeMin.value, rangeMax.value);
  28.     }
  29.     XXX('RANGE END', rangeMin.value, rangeMax.value);
  30.     
  31.     for (var i = rangeMin.value; i <= rangeMax.value; ++i) {
  32.         if (!aTree.view.selection.isSelected(i)) continue;
  33.         var rowIndex = i;
  34.         var parentIndex = aTree.view.getParentIndex(i);
  35.         var isContainer = aTree.view.isContainer(i);
  36.         if (aOpts['filterChildren']
  37.             && indexList.indexOf(parentIndex) != -1) {
  38.             continue;
  39.         }
  40.         indexList.push(rowIndex);
  41.         var row = {
  42.             rowIndex: rowIndex, 
  43.             parentIndex: parentIndex, 
  44.             isContainer: isContainer
  45.         };
  46.         
  47.         row["parentIndex"] = aTree.view.getParentIndex(i);
  48.         row["isContainer"] = aTree.view.isContainer(i);
  49.         for (var j = 0; j < aCols.length; ++j) {
  50.             var colName = aCols[j];
  51.             var col = aTree.columns.getNamedColumn(colName);
  52.             row[colName] = aTree.view.getCellText(i, col);
  53.         }
  54.         out.push(row);
  55.     }
  56.     return out;
  57. }
  58.  
  59. function flock_getMarkedUpSelection(aEvt, aDropData, aSession){/*{{{*/
  60.     var windowManager = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService();
  61.     var windowManagerInterface = windowManager.QueryInterface( Components.interfaces.nsIWindowMediator);
  62.     var topWindow = windowManagerInterface.getMostRecentWindow("navigator:browser");
  63.  
  64.     var data="";
  65.     var node=aSession.sourceNode;
  66.     var serializer = new XMLSerializer();
  67.     var parser = new DOMParser();
  68.  
  69.     var header="Header";
  70.     var label="Label";
  71.     var type="document";
  72.  
  73.     // Text (from input zone or external application)
  74.     if (aDropData.flavour.contentType == "text/unicode") {
  75.        var location = topWindow.document.getElementById('content').mCurrentBrowser.contentWindow.location + "";
  76.        var text = aDropData.data;
  77.        var src;
  78.        if (location.match(/^chrome:\/\/.+/)){
  79.           location = "";
  80.           src = text;
  81.        } else {
  82.           src = "<a href='"+location+"'>"+text+"</a>";
  83.        }
  84.        return { type: "document", header: location, label: text, src: src };
  85.     }
  86.  
  87.     var contentDetector = new nsContentDetector();
  88.     contentDetector.setTarget(node);
  89.  
  90.  
  91.     // Images
  92.     if (contentDetector.onImage) {
  93.           header=node.alt;
  94.           label=contentDetector.imageURL;
  95.           type='image';
  96.           var src='<img src="' + label + '" />';
  97.           return { type: type, header: header, label: label, src: src };
  98.     }
  99.     
  100.     //Not handling files just yet.
  101.     if(aDropData.flavour.contentType=='application/x-moz-file'){
  102.         return null;
  103.     }
  104.  
  105.     //For dragging from outside the browser. Not supported for now.
  106.     if(!node){
  107.         return null;
  108.     }
  109.  
  110.     // XXX('markedselection', node.nodeName.toLowerCase());
  111.     switch(node.nodeName.toLowerCase()){
  112.     //Handle image maps
  113.     case 'area':
  114.         var map='#' + node.parentNode.getAttribute('name');
  115.         var images=topWindow.window._content.document.getElementsByTagName('img');
  116.         dump(images.length + '\n');
  117.         for(i=0; i<images.length; i++){
  118.             dump('IMG: ' + images[i].src + '\n');
  119.             if(images[i].getAttribute('usemap')==map){
  120.                 node=images[i];
  121.             }
  122.         }
  123.         if(node.nodeName.toLowerCase()=='area'){
  124.             dump('Could not find image corresponding to map ' + map + '.\n');
  125.             return false;
  126.         }
  127.         //TODO: Normalize paths for node...
  128.         return { type: type, header: header, label: label, src: serializer.serializeToString(node) };
  129.     
  130.     //Big hack. This is for when somebody drags the favicon onto the shelf. Without this, we get the xul source b/c we're using sourceNode.
  131.     case 'image':
  132.         header=topWindow.document.getElementById('content').contentTitle;
  133.         label=topWindow.document.getElementById('content').contentDocument.URL;
  134.         type='link';
  135.         var src='<a href="' + label + '">' + $$('content').contentTitle + '</a>';
  136.         return { type: type, header: header, label: label, src: src };
  137.  
  138.     //Handle flickr photos
  139.     case 'photo':
  140.         var doc = parser.parseFromString(node.photoHTML, "text/xml");
  141.         img_elm=doc.getElementsByTagName('img');
  142.         a_elm=doc.getElementsByTagName('a');
  143.         header=img_elm[0].getAttribute('alt');
  144.         header=header.replace(/%20/g, ' ');
  145.         label=img_elm[0].getAttribute('src');
  146.         return { type: "image", header: header, label: label, src: node.photoHTML };
  147.     // Browser tabs
  148.     case 'tab':
  149.     case 'xul:tab':
  150.         return { type: "link", header: node.label, label: window.top.content.document.location.toString(), src: "" };
  151.     // Can be from the shelf itself (to ignore)
  152.     // or from the favorite manager (to insert)
  153.     // XXX need to find a cleaner way to do all that stuff
  154.     case 'shelficon':
  155.          if (node.type == 'document'){
  156.             return { type: node.type, header: node.url, label: node.title, src: node.src, dragfrom: node.id };
  157.          } else {
  158.             return { type: node.type, header: node.title, label: node.url, src: node.src, dragfrom: node.id };
  159.          }
  160.     case 'treechildren': // ERW: Big hack to get the info I need. Will be better once we have metadata attached to each object we drag
  161.         XXX('node.parentNode.id', node.parentNode.id);
  162.         if (node.parentNode.id == "flock_favoriteView")
  163.         {
  164.             var source = aDropData.data;
  165.             var title =  source.split(">")[1].split("<")[0];
  166.             var url =  source.split("'")[1];
  167.             return { type: "link", header: title, label: url, src: source };
  168.         } else {
  169.         //    for (i in node.parentNode){
  170.         //        XXX('treechildren.parentnode->'+i, node.parentNode[i]);
  171.         //    }
  172.         }
  173.     default:
  174.         //Handle selections    
  175.         var selection = flock.browser.getSelection();
  176.         for (i in node){
  177.             XXX("node."+i, node[i]);
  178.         }
  179.         if(selection.toString().length > 0){
  180.             //XXX('We get the selection ', selection);
  181.             var selection_formatted=select_src(selection);
  182.             title=topWindow.document.getElementById('content').contentTitle;
  183.             if(title.length==0) title = location;
  184.  
  185.             var location = topWindow.document.getElementById('content').mCurrentBrowser.contentWindow.location + "";
  186.             if (location.match(/^chrome:\/\/.+/)) location = "";
  187.  
  188.             //TODO: Normalize paths for selection...
  189.             data = '<blockquote cite="' + location + '">' + selection_formatted.html + "</blockquote>";
  190.             data += '<p class="citation"><cite cite="' + location + '"><a href="' + location + '">' + title + '</a>' + "</cite></p><br/>";
  191.             header=location;
  192.             label=selection;
  193.             return { type: 'document', header: header, label: label, src: data };
  194.         }
  195.         else{
  196.             if(node.nodeName.toString().toLowerCase()=='#text'){
  197.                 node=node.parentNode;
  198.             }
  199.  
  200.             //If it's an img, make sure the src attribute is the full path
  201.             if(node.src){
  202.                 node.setAttribute('src',node.src);
  203.                 type='image';
  204.                 label=node.src;
  205.                 header=node.src;
  206.                 if(node.getAttribute('alt')){
  207.                     header=node.getAttribute('alt');
  208.                 }
  209.             }
  210.             //If it's a link make sure the href attribute is the full path
  211.             if(node.href){
  212.                 node.setAttribute('href',node.href);
  213.                 type='link';
  214.                 label=node.href;
  215.                 header=node.textContent;
  216.             }
  217.             return { type: type, header: header, label: label, src: serializer.serializeToString(node) };
  218.         }
  219.     }
  220.     XXX('flock_getMarkedUpSelection: unable to understand this dropdata!!');
  221.     return aDropData.data;
  222.  
  223. }/*}}}*/